// 找出由 str1 和 str2 所指向两个链表共同后缀的起始位置
//单链表
#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct  Lnode {
      ElemType  data;    // 数据域
      struct Lnode    *next;  // 指针域
   } LNode, *LinkList; 
    
LinkList CreateList_N(int n) {
    // 逆序输入 n 个数据元素，建立带头结点的单链表
LinkList L;
int i;
LinkList p;
L = (LinkList) malloc (sizeof (LNode));
L->next=NULL;    // 先建立一个带头结点的单链表
printf("倒序输入结点值:\n");
for (i = 1; i <=n; i++) {
    p = (LinkList) malloc (sizeof (LNode));
    scanf("%s",&p->data);    // 输入元素值
    p->next = L->next; 
    L->next = p;  // 插入
}
return L;
}
void  InitList(LinkList L){
  	L = (LinkList) malloc(sizeof(LNode)) ; 
  	if(!L)  
      printf("申请失败！");
 	L->next=NULL;
}
void  OutputNode(LinkList head){
	LNode *p;
	int i=0;
	p=head->next;
	while(p!=NULL){
		printf("%c",p->data);
		i++;
		p=p->next;
	}
	// return i;
}
//找出共同后缀的起始位置
void find_pos(LNode *L1,LNode *L2){
    LNode *p,*l1,*l2;
    l1=L1->next;l2=L2->next;
    printf("开始查找！\n");
    while (l2->next!=NULL)
    {
        if(l1->data==l2->data){
            p=l1;
        }
        l1=l1->next;
        l2=l2->next;
    }
    printf("起始位置：%c",p->data);
}
//找出共同后缀的起始位置
void find_pos1(LNode *L1,LNode *L2,int n){ 
    LNode *p,*l1,*l2;
    l1=L1->next;l2=L2->next;
    while (n>=1)
    {
        l1=l1->next;
        n--;
    }
    printf("开始查找！\n");
    while (l2->next!=NULL)
    {
        if(l1->data==l2->data){
            p=l1;
            printf("起始位置：%c",p->data);
            break;
        }
        l1=l1->next;
        l2=l2->next;
    }
}
int main(){
	LinkList L1,L2;
    InitList(L1);
    InitList(L2);
	int n;int m;int i;
    printf("输入链表L1的长度:\n");
	scanf_s("%d",&n);
    L1=CreateList_N(n);
    printf("输入链表L2的长度:\n");
    scanf_s("%d",&m);
    L2=CreateList_N(m);
    find_pos1(L1,L2,n-m);
	// OutputNode(L1);
    // printf("\n");
    // OutputNode(L2);
    return 0;
}
